const userDao = require('../models/dao/userDao');

module.exports = {
	Login: async (ctx) => {
		let { userName, password } = ctx.request.body;

		// 连接数据库根据用户名和密码查询用户信息
		let user = await userDao.Login(userName, password);
		console.log('user: ', user);
		// 结果集长度为0则表示没有改用户
		if (user.length === 0) {
			ctx.body = {
				code: '004',
				msg: '用户名或密码错误',
			};
			return;
		}

		// 树库设置用户名唯一
		// 结果集长度为1则代表存在该用户
		if (user.length === 1) {
			ctx.session.user = user;
			ctx.body = {
				code: '200',
				user: user,
				msg: '登录成功',
			};

			return;
		}

		// 数据库设置用户名唯一
		// 若存在user.length != 1 || user.length != 0
		// 返回未知错误
		// 正常不会出现
		ctx.body = {
			code: '500',
			msg: '未知错误',
		};
	},
	FindUserName: async (ctx) => {
		let { userName } = ctx.request.body;

		// 连接数据库根据用户名查询用户信息
		let user = await userDao.FindUserName(userName);
		console.log('user: ', user);
		ctx.body = {
			code: 200,
			msg: '成功',
			data: user,
		};
	},
	Register: async (ctx) => {
		let { userName, password } = ctx.request.body;

		// 校验用户信息是否符合规则
		if (!checkUserInfo(ctx, userName, password)) {
			return;
		}
		// 连接数据库根据用户名查询用户信息
		// 先判断该用户是否存在
		let user = await userDao.FindUserName(userName);

		if (user.length !== 0) {
			ctx.body = {
				code: '004',
				msg: '用户名已经存在，不能注册',
			};
			return;
		}

		try {
			// 连接数据库插入用户信息
			let registerResult = await userDao.Register(userName, password);
			// 操作所影响的记录行数为1,则代表注册成功
			if (registerResult.affectedRows === 1) {
				ctx.body = {
					code: '001',
					msg: '注册成功',
				};
				return;
			}
			// 否则失败
			ctx.body = {
				code: '500',
				msg: '未知错误，注册失败',
			};
		} catch (error) {
			reject(error);
		}
	},
};
